package com.qf.base.controller;

import com.qf.base.utils.JWTUtil;
import com.qf.base.vo.UserVo;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 30909
 * controller的标准定义
 * 集成各种公共的方法
 */
public class BaseController {

    /**
     * 不可以这样成员来引用request
     * 因为Controller 本身就是单例的，导致一个Controller 的request 也是只有一个
     * 再多用户并发发的情况下，就会导致所有的请求线程顺次覆盖这个成员，进而导致程序罗技混乱
     */
    /**
     * 获取request对象的方法
     *
     * @return 返回 request 对象
     */
    public HttpServletRequest request() {
        ServletRequestAttributes servletRequestAttributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        return servletRequestAttributes.getRequest();
    }

    /**
     * 获取response的对象方法
     *
     * @return
     */
    public HttpServletResponse response() {
        ServletRequestAttributes servletRequestAttributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        return servletRequestAttributes.getResponse();
    }

    /**
     * 获取当前登录用户的实体
     */
    public UserVo user() {
        String token = request().getHeader("token");
        UserVo userVo = JWTUtil.checkToken(token);
        return userVo;
    }

    /**
     * 获取当前登录的用户id
     */
    public Long userId(){
        UserVo user =user();
        return user==null?null:user.getId();
    }
}

